
#ifndef TIPOSBONUS_H_
#define TIPOSBONUS_H_

#include "../../../Utils/GestionId.h"
#include "../../../Utils/YamlParser.h"

#include "../GestionTiposObjetos.h"

#include "Armadura.h"
#include "VidaExtra.h"
#include "EstrellaInvencibilidad.h"
#include "Volador.h"
#include <algorithm>

class TipoArmadura : public TipoObjetoMovible {
		
	public:
		
		TipoArmadura(TipoBonus_y tipoBonus);
		void AsignarABonus(Armadura* armadura);
};

class TipoVidaExtra : public TipoObjetoMovible {
		
	public:
		
		TipoVidaExtra(TipoBonus_y tipoBonus);
		void AsignarABonus(VidaExtra* vidaExtra);
		
};

class TipoEstrellaInvencibilidad : public TipoObjetoMovible {
		
	public:
		
		TipoEstrellaInvencibilidad(TipoBonus_y tipoBonus);
		void AsignarABonus(EstrellaInvencibilidad* estrellaInvencibilidad);
		
};

class TipoVolador : public TipoObjetoMovible {
		
	public:
		
		TipoVolador(TipoBonus_y tipoBonus);
		void AsignarABonus(Volador* volador);
		
};

class GestionTiposBonus {

	static TipoArmadura* tipoArmadura;
	static TipoVidaExtra* tipoVidaExtra;
	static TipoEstrellaInvencibilidad* tipoEstrellaInvencibilidad;
	static TipoVolador* tipoVolador;
		
	public:
	
		static void Inicializar(vector <TipoBonus_y> tiposBonus);
		static void AsignarTipoBonus(Armadura* armadura);
		static void AsignarTipoBonus(VidaExtra* vidaExtra);
		static void AsignarTipoBonus(EstrellaInvencibilidad* estrellaInvencibilidad);
		static void AsignarTipoBonus(Volador* volador);
		
		static int idPrincipalArmadura;
		static int idPrincipalVidaExtra;
		static int idPrincipalEstrellaInvencibilidad;
		static int idPrincipalVolador;
};

#endif /* TIPOSBONUS_H_ */
